import Vue from 'vue'
import Vuex from 'vuex'
import 'es6-promise/auto'//Vuex 依赖 Promise。如果你支持的浏览器并没有实现 Promise (比如 IE)，那么你可以使用一个 polyfill 的库，例如 es6-promise。
Vue.use(Vuex)

import defaultState from "./state"
import mutations from "./mutations"

//导出
export default function(){
    const store = new Vuex.Store({
        // 开发环境与发布环境  严格模式：在严格模式下，无论何时发生了状态变更且不是由 mutation 函数引起的，将会抛出错误。这能保证所有的状态变更都能被调试工具跟踪到。
        strict: process.env.NODE_ENV !== 'production',
        state: defaultState,
        mutations: mutations,
        plugins: [//Vuex 的 store 接受 plugins 选项，这个选项暴露出每次 mutation 的钩子。Vuex 插件就是一个函数，它接收 store 作为唯一参数：
            (state) => {
                console.log(state);
            }
        ],
        modules:{
            //A模块
            // 模块与模块之间交互：rootState
            a:{
                namespaced: true, // 局部命名空间,读取设置方式都变了，对state读取不会产生影响
                state:{
                    username:''
                },
                mutations:{
                    updataUsername(state,username){
                        state.username=username;
                    }
                }
            }
        }
    })
    return store;
}